//package com.qf.mybatisplus.config;
//
//import com.qf.mybatisplus.realm.MyRealm;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
//import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
//import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.LinkedHashMap;
//import java.util.Map;
//
//@Slf4j
//@Configuration
//public class ShiroConfig {
//
//    /**
//     * 注入自定义的realm
//     * @return MyRealm
//     */
//    @Bean
//    public MyRealm myAuthRealm() {
//        MyRealm myRealm = new MyRealm();
//        log.info("====myRealm注册完成=====");
//        return myRealm;
//    }
//
//    /**
//     * 注入安全管理器
//     * @return SecurityManager
//     */
//    @Bean(name = "securityManager")
//    public DefaultWebSecurityManager securityManager() {
//        // 将自定义realm加进来
//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(myAuthRealm());
//
//        log.info("====securityManager注册完成====");
//        return securityManager;
//    }
//
//
//
//    /**
//     * 开启shiro 注解支持. 使以下注解能够生效 :
//     * 需要认证 {@link org.apache.shiro.authz.annotation.RequiresAuthentication RequiresAuthentication}
//     * 需要用户 {@link org.apache.shiro.authz.annotation.RequiresUser RequiresUser}
//     * 需要访客 {@link org.apache.shiro.authz.annotation.RequiresGuest RequiresGuest}
//     * 需要角色 {@link org.apache.shiro.authz.annotation.RequiresRoles RequiresRoles}
//     * 需要权限 {@link org.apache.shiro.authz.annotation.RequiresPermissions RequiresPermissions}
//     */
//    @Bean
//    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
//        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
//        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
//        return authorizationAttributeSourceAdvisor;
//    }
//
//
//
//
//    /**
//     * 注入Shiro过滤器
//     * @param securityManager 安全管理器
//     * @return ShiroFilterFactoryBean
//     */
//    @Bean
//    public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
//        // 定义shiroFactoryBean
//        ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean();
//
//        // 设置自定义的securityManager
//        shiroFilterFactoryBean.setSecurityManager(securityManager);
//
//        // 设置默认登录的url，身份认证失败会访问该url
//        shiroFilterFactoryBean.setLoginUrl("/login");
//        // 设置成功之后要跳转的链接
//        shiroFilterFactoryBean.setSuccessUrl("/success");
//        // 设置未授权界面，权限认证失败会访问该url
//        shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");
//
//        // LinkedHashMap是有序的，进行顺序拦截器配置
//        Map<String,String> filterChainMap = new LinkedHashMap<>();
//
//        // 配置可以匿名访问的地址，可以根据实际情况自己添加，放行一些静态资源等，anon表示放行
//        filterChainMap.put("/css/**", "anon");
//        filterChainMap.put("/imgs/**", "anon");
//        filterChainMap.put("/js/**", "anon");
//        filterChainMap.put("/swagger-*/**", "anon");
//        filterChainMap.put("/swagger-ui.html/**", "anon");
//        // 登录url 放行
//        filterChainMap.put("/login", "anon");
//        filterChainMap.put("/user/*", "anon");
//        filterChainMap.put("/testPermission/test1", "anon");
//
//        // “/user/admin” 开头的需要身份认证，authc表示要身份认证
//        filterChainMap.put("/user/admin*", "authc");
//        // “/user/student” 开头的需要角色认证，是“admin”才允许
//        filterChainMap.put("/user/student*/**", "roles[admin]");
//        // “/user/teacher” 开头的需要权限认证，是“user:create”才允许
//        filterChainMap.put("/user/teacher*/**", "perms[\"user:create\"]");
//
//        // 配置logout过滤器
//        filterChainMap.put("/logout", "logout");
//
//        // 设置shiroFilterFactoryBean的FilterChainDefinitionMap
//        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
//        log.info("====shiroFilterFactoryBean注册完成====");
//        return shiroFilterFactoryBean;
//    }
//}
